Component({
  // 对外参数（prop）
  properties: {
    /** 内部样式 */
    innerStyle: { type: String, value: '' },
    /** 唯一标识符 */
    id: { type: String, value: '' },
    /** 剧目id(上传内容库返回的id) */
    playletId: { type: String, value: '' },
    /** 剧集id */
    episodeIdList: { type: Array, value: () => [] },
    /** 指定播放剧集id或者是剧集数（剧集数只在三方cdn 生效）若不指定或未匹配到，则从第一集开始播放 */
    playId: { type: [String, Number], value: undefined },
    /**	扩展参数+三方cdn播放数据 */
    extParams: { type: Object, value: () => ({}) },
    /**	是否展示分享按钮 */
    showShare: { type: Boolean, value: false },
    /**	视频大小与 video 容器大小不一致时，视频的表现形式，参考video 的object-fit属性 */
    objectFit: { type: String, value: () => ({}) },
    /**	播放倍率 */
    playbackRate: { type: Number, value: 1 },
    /** 是否展示底部安全区 */
    showBottomSafeArea: { type: Boolean, value: true },
    /** 无权限播放时触发 (解决 uni事件监听失效的问题)  */
    nopermissionplayCallBack: { type: Function, value: undefined },
    /** 视频播放出错时触发 (解决 uni事件监听失效的问题) */
    errorCallBack: { type: Function, value: undefined },
    /** 点击某个动作时触发 (解决 uni事件监听失效的问题) */
    actionCallBack: { type: Function, value: undefined },
    /** 切换剧集时触发的回调函数 (解决 uni事件监听失效的问题) */
    changeCallBack: { type: Function, value: undefined },
    /** 开始播放的回调函数  (解决 uni事件监听失效的问题) */
    playCallBack: { type: Function, value: undefined },
  },

  methods: {
    /** 无权限播放信息，开发者需要针对此状态做对应的支付 or 广告解锁操作,操作完成后，更新 extParams.payedList 数据，从而完成短剧播放的履约部分 */
    handleNopermissionplay(e) {
      if (typeof this.data.nopermissionplayCallBack === 'function') {
        this.data.nopermissionplayCallBack(e);
      }
      this.triggerEvent('nopermissionplay', e);
    },
    /**
     * 用户动作数据：点赞、关注、追剧
     * actionType:
     * ● like 点赞
     * ● collect 收藏
     * ● follow 关注
     * ● operation 运营位点击
     */
    handleAction(e) {
      if (typeof this.data.actionCallBack === 'function') {
        this.data.actionCallBack(e);
      }
      this.triggerEvent('action', e);
    },
    /** 剧集播放切换事件  */
    handleChange(e) {
      if (typeof this.data.changeCallBack === 'function') {
        this.data.changeCallBack(e);
      }
      this.triggerEvent('change', e.detail);
    },
    /** 播放异常信息 */
    handleError(e) {
      console.error('播放错误====', e);
      if (typeof this.data.errorCallBack === 'function') {
        this.data.errorCallBack(e);
      }
      this.triggerEvent('error', e);
    },
    /** 开始播放 */
    handlePlay(e) {
      if (typeof this.data.playCallBack === 'function') {
        this.data.playCallBack(e);
      }
      this.triggerEvent('play', e);
    },
  },
});
